package br.com.esporte.negocios.entidade.imp;

import java.util.Date;

import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.MappedSuperclass;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import br.com.esporte.negocios.entidade.IEntidade;

/**
 * @author Milton Domingues
 */
@SuppressWarnings("serial")
@MappedSuperclass
public abstract class Entidade implements IEntidade {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long id;

	@Temporal(TemporalType.TIMESTAMP)
	private Date dataInclusao;

	@Temporal(TemporalType.TIMESTAMP)
	private Date dataAlteracao;

	@ManyToOne(fetch=FetchType.LAZY)
	@JoinColumn(name = "usuario_inclusao_id")
	private Usuario usuarioInclusao;

	@ManyToOne(fetch=FetchType.LAZY)
	@JoinColumn(name = "usuario_alteracao_id")
	private Usuario usuarioAlteracao;

	public Entidade() {

	}

	@Override
	public boolean equals(Object obj) {
		boolean equals = false;
		if (this.getClass() == obj.getClass()) {
			if ((this.getId() == ((Entidade) obj).getId())) {
				equals = true;
			} else if (obj == this) {
				equals = true;
			}
		}
		return equals;
	}

	public Date getDataAlteracao() {
		return this.dataAlteracao;
	}

	public Date getDataInclusao() {
		return this.dataInclusao;
	}

	@Override
	public Long getId() {
		return this.id;
	}

	public Usuario getUsuarioAlteracao() {
		return this.usuarioAlteracao;
	}

	public Usuario getUsuarioInclusao() {
		return this.usuarioInclusao;
	}

	public void setDataAlteracao(Date dataAlteracao) {
		this.dataAlteracao = dataAlteracao;
	}

	public void setDataInclusao(Date dataInclusao) {
		this.dataInclusao = dataInclusao;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public void setUsuarioAlteracao(Usuario usuarioAlteracao) {
		this.usuarioAlteracao = usuarioAlteracao;
	}

	public void setUsuarioInclusao(Usuario usuarioInclusao) {
		this.usuarioInclusao = usuarioInclusao;
	}

}
